'\"macro stdmacro
.\"
.\" Copyright (c) 2009 Aconex.  All Rights Reserved.
.\"
.\" This program is free software; you can redistribute it and/or modify it
.\" under the terms of the GNU General Public License as published by the
.\" Free Software Foundation; either version 2 of the License, or (at your
.\" option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
.\" or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
.\" for more details.
.\"
.\"
.TH PMTIME 3 "Aconex" "Performance Co-Pilot"
.ds xM pmtime
.SH NAME
\f3pmTimeConnect\f1,
\f3pmTimeDisconnect\f1,
\f3pmTimeRecv\f1,
\f3pmTimeSendAck\f1,
\f3pmTimeShowDialog\f1 \-
time control functions for synchronizing the archive position and
update interval between one or more applications
.SH "C SYNOPSIS"
.ft 3
.ad l
.hy 0
#include <pcp/pmtime.h>
.sp
int pmTimeConnect(int \fIport\fP, pmTime *\fIstate\fP);
.br
int pmTimeDisconnect(int \fIfd\fP);
.br
int pmTimeSendAck(int \fIfd\fP, struct timeval *\fIfetchTime\fP);
.br
int pmTimeShowDialog(int \fIfd\fP, int \fIshow\fP);
.br
int pmTimeRecv(int \fIfd\fP, pmTime *\fIstate\fP);
.sp
cc ... \-lpcp_gui
.hy
.ad
.ft 1
.SH DESCRIPTION
These functions form part of the Performance Metrics Applications
Programming Interface (PMAPI) and are intended to provide a uniform
mechanism for applications to both replay archive data and report
live data in a time synchronized manner.
.PP
The
.I pmTime
structure has the following fields:
.sp 0.5v
.ft CR
.nf
.in +0.25i
typedef struct {
    unsigned int        magic;
    unsigned int        length;
    pm_tctl_command     command;
    pm_tctl_source      source;
    pm_tctl_state       state;
    pm_tctl_mode        mode;
    struct timeval      delta;
    struct timeval      position;
    struct timeval      start;     /* archive only */
    struct timeval      end;       /* archive only */
    char                data[0];   /* arbitrary length info (TZ) */
} pmTime;
.in -0.25i
.fi
.ft R
.PP
In the simplest case, the application should call
.B pmTimeConnect
to connect to the time control server,
.BR pmtime (1),
and then repeatedly call
.B pmTimeRecv
in the main loop of the application.
On success,
.B pmTimeConnect
returns a non-negative file descriptor.
In applications which have multiple threads of control, rather than
simply blocking in
.BR pmTimeRecv ,
the file descriptor may be used in calls to
.BR select (2).
In graphical applications, the file descriptor may be used to interface
with the event loop.
.PP
The
.I port
parameter to
.B pmTimeConnect
is the port number of the socket on which the time control server is
(or will be) listening for new connections.
.PP
The state parameter to
.B pmTimeConnect
is used to initialize a new time control server or to pass additional
information to an existing time control server.
The
.I start
and
.I finish
fields indicate the chronological bounds interesting to the application.
The
.I showgui
field indicates whether the time control server should initially show
or hide the dialog.
The
.IR position ,
.IR delta,
and
.I data
fields indicate the initial archive position, update interval,
time zone string and time zone label string.
.PP
.B pmTimeRecv
blocks until the time control server sends a command message.
It then updates the state parameter and returns one of the PM_TCTL_*
command identifiers.
.PP
The PM_TCTL_SET command indicates the application should seek to the
archive position (see
.BR pmSetMode (3))
returned in the
.I position
field of the state parameter.
.PP
The PM_TCTL_STEP command indicates the application should perform an
update, i.e. advance (or rewind, if delta is negative) to the time
indicated by position and then fetch new metric values, update the
display or whatever.  In order for several application to remain
synchronized, the time control server will wait until all applications
have acknowledged that they have completed the step command.
Applications should call pmTimeSendAck when the step command has been
processed.  Note that PM_TCTL_STEP is the only command that requires an
explicit acknowledgement.
.PP
The PM_TCTL_VCRMODE command is used by the time control server to
indicate the current VCR mode.
.PP
The value is returned in the
.I mode
field of the state parameter passed
to
.BR pmTimeRecv ,
and remains valid until the next PM_TCTL_VCRMODE command is received.
.PP
The PM_TCTL_TZ command indicates the application should use a new time-
zone, as indicated in the
.I newzone
field of the state parameter.
.PP
The PM_TCTL_BOUNDS command is sent to all applications when the time
control server changes its chronological bounds.
This may occur when a new application connects to the time control
server or the user changes the bounds manually.
Most applications will ignore this command.
.PP
The PM_TCTL_GUIHIDE or PM_TCTL_GUISHOW commands will be sent to all
applications when the
visibility of the time control server changes.
This allows applications to alter the text in menus or buttons to
reflect this change.
Applications may change the visibility of the time control dialog using
the
.B pmTimeShowDialog
function.
The initial visibility is determined when
the time control dialog is first created by an application calling
.B pmTimeConnect
with the
.I showgui
field in the state parameter set to the desired value.
.PP
The
.B pmTimeDisconnect
function may be used to close the command socket to the time control server.
This is useful when applications need to change the connection mode,
e.g. to divorce the current time control server and connect to a new one.
.SH SEE ALSO
.BR pmtime (1),
.BR PMAPI (3)
and
.BR pmSetMode (3).

.\" control lines for scripts/man-spell
.\" +ok+ showgui newzone {from field in struc pmTimeControls}
.\" +ok+ PM_TCTL_ {from PM_TCTL_*}
